package com.turi.layer
{
	import org.openscales.core.layer.osm.OSM;
	import org.openscales.geometry.basetypes.Bounds;
	
	public class GoogleMap extends OSM
	{
		public function GoogleMap(name:String, layers:String)
		{
			var url:String = "http://mt0.google.cn/vt?hl=zh-CN&gl=CN&lyrs="+layers;
			super(name, url);
			
			this.altUrls = [ "http://mt0.google.cn/vt?hl=zh-CN&gl=CN&lyrs="+layers, 
				"http://mt1.google.cn/vt?hl=zh-CN&gl=CN&lyrs="+layers,
				"http://mt2.google.cn/vt?hl=zh-CN&gl=CN&lyrs="+layers, 
				"http://mt3.google.cn/vt?hl=zh-CN&gl=CN&lyrs="+layers
			];
			this.generateResolutions(19, OSM.DEFAULT_MAX_RESOLUTION);
		}
		
		override public function getURL(bounds:Bounds):String
		{
			var res:Number = this.map.resolution;
			var x:Number = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileWidth));
			var y:Number = Math.round((this.maxExtent.top - bounds.top) / (res * this.tileHeight));
			var z:Number = this.map.zoom;
			var limit:Number = Math.pow(2, z);
			
			if (y < 0 || y >= limit ||x < 0 || x >= limit) {
				return "";
			} else {
				x = ((x % limit) + limit) % limit;
				y = ((y % limit) + limit) % limit;
				var url:String = this.url;
				var path:String = "&x=" + x + "&y=" + y + "&z="+z;
				if (this.altUrls != null) {
					url = this.selectUrl(this.url + path, this.getUrls());
				}
				return url + path;
			}
		}
	}
}